/**
 * #### 字典类型枚举；
 * 1、expire:过期时间；
 * 2、permanent:永久；
 */
export enum Dictionaries {
  /**
   * #### 过期时间类型;
   */
  expire = "__expire__",
  /**
   * #### 永久存储类型;
   */
  permanent = "permanent",
}

/**
 * #### 过期时间类型;
 * 1、permanent:永久存储；
 * 2、number:存储时间；
 */
export type Expire = Dictionaries.permanent | number;

/**
 * #### 存储值类型接口;
 */
export interface Data<T> {
  value: T;
  [Dictionaries.expire]: Dictionaries.expire | number;
}

/**
 * #### 存储结果类型接口;
 */
export interface Result<T> {
  message: string;
  value: T | null;
}

/**
 * #### 本地储存类接口；localStorage
 */
export interface StorageClass {
  /**
   *
   * @param key 存储值的键
   * @param value 值
   * @param expire 过期时间
   * @returns
   */
  set: <T>(key: string, value: T, expire?: Expire) => void;
  /**
   * #### 获取存储值，T为存储值的类型，key为存储值的键
   * @param key 存储值的键
   * @returns
   */
  get: <T>(key: string) => Result<T | null>;
  /**
   * #### 删除存储值，key为存储值的键
   * @param key 存储值的键
   * @returns
   */
  remove: (key: string) => void;
  /**
   * #### 清空存储值
   */
  clear: () => void;
}
